﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using LogicaNegocios;
using Entidades.Negocio;
using Entidades;

namespace MilpoVideo
{
    /// <summary>
    /// Descripción breve de WebService
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // Para permitir que se llame a este servicio Web desde un script, usando ASP.NET AJAX, quite la marca de comentario de la línea siguiente. 
    // [System.Web.Script.Services.ScriptService]
    public class WebService : System.Web.Services.WebService
    {
        #region Tacsa
        [WebMethod]
        public Tacsa agregarTacsa(Tacsa tacsa, out Boolean resultado, out String error)
        {
            try
            {
                tacsa = tacsa.agregarTacsa();    
                resultado = true;
                error = "";
            }
            catch (Exception e)
            {
                resultado = false;
                error = ControlarException(e);
            }
            return tacsa;
        }


        [WebMethod]
        public void modificarTacsa(Tacsa tacsa, out Boolean resultado, out String error)
        {
            try
            {
                tacsa.modificarTacsa();
                resultado = true;
                error = "";
            }
            catch (Exception e)
            {
                resultado = false;
                error = ControlarException(e);
            }
        }


        [WebMethod]
        public void eliminarTacsa(Tacsa tacsa, out Boolean resultado, out String error)
        {
            try
            {
                tacsa.eliminarTacsa();
                resultado = true;
                error = "";
            }
            catch (Exception e)
            {
                resultado = false;
                error = ControlarException(e);
            }
        }


        [WebMethod]
        public List<Tacsa> listarTacsa(FiltroTacsa filtroTacsa, out Boolean resultado, out String error)
        {
            List<Tacsa> listaTacsa = new List<Tacsa>();
            try
            {
                listaTacsa = filtroTacsa.listarTacsa();
                resultado = true;
                error = "";
            }
            catch (Exception e)
            {
                resultado = false;
                error = ControlarException(e);
            }
            return listaTacsa;
        }


        [WebMethod]
        public Tacsa obtenerTacsaReproductor(int tipoTacsa, out Boolean resultado, out String error)
        {
            Tacsa tacsa = new Tacsa();
            try
            {
                FiltroTacsa filtroTacsa = new FiltroTacsa();
                filtroTacsa.TipoTacsa = tipoTacsa;
                if (tipoTacsa == 2)
                    tacsa = TacsaLN.obtenerTacsaMensualReproductor();
                else
                    tacsa = TacsaLN.obtenerTacsaAnualReproductor();
                resultado = true;
                error = "";
            }
            catch (Exception e)
            {
                resultado = false;
                error = ControlarException(e);
            }
            return tacsa;
        }

        #endregion 
   
        #region HablaFacil
        [WebMethod]
        public HablaFacil agregarHablaFacil(HablaFacil hablaFacil, out Boolean resultado, out String error)
        {
            try
            {
                hablaFacil = hablaFacil.agregarHablaFacil();
                resultado = true;
                error = "";
            }
            catch (Exception e)
            {
                resultado = false;
                error = ControlarException(e);
            }
            return hablaFacil;
        }

        [WebMethod]
        public void modificarHablaFacil(HablaFacil hablaFacil, out Boolean resultado, out String error)
        {
            try
            {
                hablaFacil.modificarHablaFacil();
                resultado = true;
                error = "";
            }
            catch (Exception e)
            {
                resultado = false;
                error = ControlarException(e);
            }
        }


        [WebMethod]
        public void eliminarHablaFacil(HablaFacil hablaFacil, out Boolean resultado, out String error)
        {
            try
            {
                hablaFacil.eliminarHablaFacil();
                resultado = true;
                error = "";
            }
            catch (Exception e)
            {
                resultado = false;
                error = ControlarException(e);
            }
        }


        [WebMethod]
        public List<HablaFacil> listarHablaFacil(FiltroHablaFacil filtroHablaFacil, out Boolean resultado, out String error)
        {
            List<HablaFacil> listaHablaFacil = new List<HablaFacil>();
            try
            {
                listaHablaFacil = filtroHablaFacil.listarHablaFacil(); 
                resultado = true;
                error = "";
            }
            catch (Exception e)
            {
                resultado = false;
                error = ControlarException(e);
            }
            return listaHablaFacil;
        }


        [WebMethod]
        public List<HablaFacil> reporteHablaFacil(out Boolean resultado, out String error)
        {
            List<HablaFacil> listaHablaFacil = new List<HablaFacil>();
            try
            {
                listaHablaFacil = HablaFacilLN.listarHablaFacilReporte();
                resultado = true;
                error = "";
            }
            catch (Exception e)
            {
                resultado = false;
                error = ControlarException(e);
            }
            return listaHablaFacil;
        }


        [WebMethod]
        public HablaFacil obtenerHablaFacilReproductor(int tipoHablaFacil, out Boolean resultado, out String error)
        {
            HablaFacil hablafacil = new HablaFacil();
            try
            {
                FiltroHablaFacil filtroHablaFacil = new FiltroHablaFacil();
                filtroHablaFacil.TipoHablaFacil = tipoHablaFacil;
                hablafacil = HablaFacilLN.obtenerHablaFacilReproductor(tipoHablaFacil);
                resultado = true;
                error = "";
            }
            catch (Exception e)
            {
                resultado = false;
                error = ControlarException(e);
            }
            return hablafacil;
        }

        [WebMethod]
        public HablaFacil obtenerHablaFacilReproductorPromedio(int tipoHablaFacil, String fechaSeleccionada, out int diasMensual,  out Boolean resultado, out String error)
        {
            HablaFacil hablafacil = new HablaFacil();
            try
            {
                FiltroHablaFacil filtroHablaFacil = new FiltroHablaFacil();
                filtroHablaFacil.TipoHablaFacil = tipoHablaFacil;
                int diasMensualTmp = 0;
                hablafacil = HablaFacilLN.obtenerHablaFacilReproductorPromedio(tipoHablaFacil, fechaSeleccionada, ref diasMensualTmp);
                diasMensual = diasMensualTmp;
                resultado = true;
                error = "";
            }
            catch (Exception e)
            {
                resultado = false;
                error = ControlarException(e);
                diasMensual = 0;
            }
            return hablafacil;
        }

        #endregion

        #region Accidente
        [WebMethod]
        public Accidente agregarAccidente(Accidente accidente, out Boolean resultado, out String error)
        {
            try
            {
                if (accidente.VCHDESCRIPCION.Trim().Length == 0)
                    throw new Exception("Debe ingresar una Descripción del Accidente");

                accidente = accidente.agregarAccidente();
                resultado = true;
                error = "";
            }
            catch (Exception e)
            {
                resultado = false;
                error = ControlarException(e);
            }
            return accidente;
        }

        [WebMethod]
        public void modificarAccidente(Accidente accidente, out Boolean resultado, out String error)
        {
            try
            {
                accidente.modificarAccidente();
                resultado = true;
                error = "";
            }
            catch (Exception e)
            {
                resultado = false;
                error = ControlarException(e);
            }
        }


        [WebMethod]
        public void eliminarAccidente(Accidente accidente, out Boolean resultado, out String error)
        {
            try
            {
                accidente.eliminarAccidente();
                resultado = true;
                error = "";
            }
            catch (Exception e)
            {
                resultado = false;
                error = ControlarException(e);
            }
        }


        [WebMethod]
        public List<Accidente> listarAccidente(FiltroAccidente filtroAccidente, out Boolean resultado, out String error)
        {
            List<Accidente> listaAccidente = new List<Accidente>();
            try
            {
                listaAccidente = filtroAccidente.listarAccidente();
                resultado = true;
                error = "";
            }
            catch (Exception e)
            {
                resultado = false;
                error = ControlarException(e);
            }
            return listaAccidente;
        }


        [WebMethod]
        public List<Accidente> listarAccidenteReproductor(out Boolean resultado, out String error)
        {
            List<Accidente> listaAccidente = new List<Accidente>();
            try
            {
                listaAccidente = AccidentesLN.listarAccidenteReproductor();
                resultado = true;
                error = "";
            }
            catch (Exception e)
            {
                resultado = false;
                error = ControlarException(e);
            }
            return listaAccidente;
        }

        [WebMethod]
        public Accidente obtenerAccidente(FiltroAccidente filtroAccidente, out Boolean resultado, out String error)
        {
            Accidente accidente = new Accidente();
            try
            {
                accidente = filtroAccidente.obtenerAccidente();
                resultado = true;
                error = "";
            }
            catch (Exception e)
            {
                resultado = false;
                error = ControlarException(e);
            }
            return accidente;
        }

        #endregion

        #region RolCapacitacion

        [WebMethod]
        public RolCapacitacion agregarRolCapacitacion(RolCapacitacion rolCapacitacion, out Boolean resultado, out String error)
        {
            try
            {
                if (rolCapacitacion.VCHTITULO.Trim().Length == 0)
                    throw new Exception("Debe ingresar un Título de la Capacitación");
                if (rolCapacitacion.VCHDESCRIPCION.Trim().Length == 0)
                    throw new Exception("Debe ingresar una Descripción de la Capacitación");
               

                rolCapacitacion = rolCapacitacion.agregarRolCapacitacion();
                resultado = true;
                error = "";
            }
            catch (Exception e)
            {
                resultado = false;
                error = ControlarException(e);
            }
            return rolCapacitacion;
        }

        [WebMethod]
        public void modificarRolCapacitacion(RolCapacitacion rolCapacitacion, out Boolean resultado, out String error)
        {
            try
            {
                rolCapacitacion.modificarRolCapacitacion();
                resultado = true;
                error = "";
            }
            catch (Exception e)
            {
                resultado = false;
                error = ControlarException(e);
            }
        }


        [WebMethod]
        public void eliminarRolCapacitacion(RolCapacitacion rolCapacitacion, out Boolean resultado, out String error)
        {
            try
            {
                rolCapacitacion.eliminarRolCapacitacion();
                resultado = true;
                error = "";
            }
            catch (Exception e)
            {
                resultado = false;
                error = ControlarException(e);
            }
        }


        [WebMethod]
        public List<RolCapacitacion> listarRolCapacitacion(FiltroRolCapacitacion filtroRolCapacitacion, out Boolean resultado, out String error)
        {
            List<RolCapacitacion> listaRolCapacitacion = new List<RolCapacitacion>();
            try
            {
                listaRolCapacitacion = filtroRolCapacitacion.listarRolCapacitacion();
                resultado = true;
                error = "";
            }
            catch (Exception e)
            {
                resultado = false;
                error = ControlarException(e);
            }
            return listaRolCapacitacion = filtroRolCapacitacion.listarRolCapacitacion();
            
        }

        [WebMethod]
        public List<RolCapacitacion> listarRolCapacitacionReproductor(out Boolean resultado, out String error)
        {
            List<RolCapacitacion> listaRolCapacitacion = new List<RolCapacitacion>();
            try
            {
                listaRolCapacitacion = RolCapacitacionLN.listarRolCapacitacionReproductor();
                resultado = true;
                error = "";
            }
            catch (Exception e)
            {
                resultado = false;
                error = "Se egeneró la siguiente Excpetion: " + e.Message;
            }
            return listaRolCapacitacion;

        }


        [WebMethod]
        public RolCapacitacion obtenerRolCapacitacion(FiltroRolCapacitacion filtroRolCapacitacion, out Boolean resultado, out String error)
        {
            RolCapacitacion rolCapacitacion = new RolCapacitacion();
            try
            {
                rolCapacitacion = filtroRolCapacitacion.obtenerRolCapacitacion();
                resultado = true;
                error = "";
            }
            catch (Exception e)
            {
                resultado = false;
                error = "Se egeneró la siguiente Excpetion: " + e.Message;
            }
            return rolCapacitacion;
        }

        #endregion

        #region Usuario

        [WebMethod]
        public Usuario obtenerUsuario(string susuario, string password, out Boolean resultado, out String error)
        {
            Usuario usuario = null;
            try
            {
                usuario = UsuarioLN.obtenerUsuario(susuario, password);
                if (usuario != null)
                {
                    resultado = true;
                    error = "";
                }
                else
                {
                    resultado = false;
                    error = "Usuario y/o Password Incorrecto";
                }
            }
            catch (Exception e)
            {
                resultado = false;
                error = ControlarException(e);
            }
            return usuario;
        }


        #endregion 
    
        #region Parametro


        [WebMethod]
        public void modificarParametro(int codigo1, string valor1, int codigo2, string valor2, int codigo3, string valor3, out Boolean resultado, out String error)
        {
            try
            {
                ParametroLN.modidificarParametros(codigo1, valor1, codigo2, valor2, codigo3, valor3);
                resultado = true;
                error = "";
            }
            catch (Exception e)
            {
                resultado = false;
                error = ControlarException(e);
            }
        }
        

        [WebMethod]
        public List<Parametro> listarParametro(out Boolean resultado, out String error)
        {
            List<Parametro> listaParametro = new List<Parametro>();
            try
            {
                listaParametro = ParametroLN.listarParametro();
                resultado = true;
                error = "";
            }
            catch (Exception e)
            {
                resultado = false;
                error = ControlarException(e);
            }
            return listaParametro;
        }
        
        #endregion 
    
        #region Mensaje

        [WebMethod]
        public Mensaje agregarMensaje(String descripcion, String fechaEmitir, String fechaTermino, Boolean ciclico, Boolean dom, Boolean lun, Boolean mar,
                            Boolean mie, Boolean jue, Boolean vie, Boolean sab, Boolean intervalo, int intervaloHoras, int intervaloMinutos, int vecesRepetir, String user,
            out Boolean resultado, out String error)
        {
            Mensaje mensaje = new Mensaje();
            try
            {
                mensaje.fechaEmitir = Funciones.StringToDate(fechaEmitir);
                if (fechaTermino == "")
                {
                    mensaje.fechaTermino = null;
                }
                else
                {
                    mensaje.fechaTermino = Funciones.StringToDate(fechaTermino);
                }
                mensaje.sfechaEmitir = fechaEmitir;
                mensaje.sfechaTermino = fechaTermino;
                mensaje.mensaje = descripcion;
                mensaje.ciclico = ciclico;
                mensaje.domingo = dom;
                mensaje.lunes = lun;
                mensaje.martes = mar;
                mensaje.miercoles = mie;
                mensaje.jueves = jue;
                mensaje.viernes = vie;
                mensaje.sabado = sab;
                mensaje.intervalo = intervalo;
                mensaje.intervaloHoras = intervaloHoras;
                mensaje.intervaloMinutos = intervaloMinutos;
                mensaje.vecesRepetir = vecesRepetir;
                mensaje = mensaje.agregarMensaje();
                if (mensaje != null)
                {
                    resultado = true;
                    error = "";
                }
                else
                {
                    resultado = false;
                    error = "Se generó un error al Registrar el Mensaje";
                }
            }
            catch (Exception e)
            {
                resultado = false;
                error = ControlarException(e);
            }
            return mensaje;
        }

        [WebMethod]
        public Mensaje modificarMensaje(int id, String descripcion, String fechaEmitir, String fechaTermino, Boolean ciclico, Boolean dom, Boolean lun,
                    Boolean mar, Boolean mie, Boolean jue, Boolean vie, Boolean sab, Boolean intervalo, int intervaloHoras, int intervaloMinutos, int vecesRepetir, String user,
            out Boolean resultado, out String error)
        {
            
            try
            {   
                Mensaje mensaje = new Mensaje();
                mensaje.id = id;
                mensaje.fechaEmitir = Funciones.StringToDate(fechaEmitir);
                if (fechaTermino == "")
                {
                    mensaje.fechaTermino = null;
                }
                else
                {
                    mensaje.fechaTermino = Funciones.StringToDate(fechaTermino);
                }
                mensaje.sfechaEmitir = fechaEmitir;
                mensaje.sfechaTermino = fechaTermino;
                mensaje.mensaje = descripcion;
                mensaje.ciclico = ciclico;
                mensaje.domingo = dom;
                mensaje.lunes = lun;
                mensaje.martes = mar;
                mensaje.miercoles = mie;
                mensaje.jueves = jue;
                mensaje.viernes = vie;
                mensaje.sabado = sab;
                mensaje.intervalo = intervalo;
                mensaje.intervaloHoras = intervaloHoras;
                mensaje.intervaloMinutos = intervaloMinutos;
                mensaje.vecesRepetir = vecesRepetir;
                mensaje.modificarMensaje();
                resultado = true;
                error = "";
                return mensaje;
            }
            catch (Exception e)
            {
                resultado = false;
                error = ControlarException(e);
                return null;
            }
            
        }

        [WebMethod]
        public Mensaje eliminarMensaje(int id, out Boolean resultado, out String error)
        {
            try
            {   
                Mensaje mensaje = new Mensaje();
                mensaje.id = id;
                mensaje.eliminarMensaje();
                resultado = true;
                error = "";
                return mensaje;
            }
             catch (Exception e)
             {
                 resultado = false;
                 error = ControlarException(e);
                 return null;
             }
            
        }

        [WebMethod]
        public List<Mensaje> listarMensaje(out Boolean resultado, out String error)
        {
            List<Mensaje> listaMensajes = new List<Mensaje>();
            try
            { 
                listaMensajes = MensajeLN.listarMensaje();
                resultado = true;
                error = "";
            }
            catch (Exception e)
            {
                resultado = false;
                error = ControlarException(e);
            }
            return listaMensajes;
        }


        [WebMethod]
        public List<Mensaje> getMensajesValidos(out Boolean resultado, out String error)
        {
            List<Mensaje> listaMensajes = new List<Mensaje>();
            try
            {
                listaMensajes = MensajeLN.listarMensajeValidos();
                resultado = true;
                error = "";
            }
            catch (Exception e)
            {
                resultado = false;
                error = ControlarException(e);
            }
            return listaMensajes;
        }

        #endregion Mensaje
        
        #region Funciones

        public String ControlarException(Exception e)
        { 
            //String error = "Se egeneró la siguiente Excpetion: " + e.Message;
            String error = e.Message;
            if (e.InnerException != null)
                error += " Inner Exception: " + e.InnerException.Message;
            return error;
        }




        #endregion Funciones

    }
}
